package com.nl.controller.web.service;

import com.alibaba.druid.util.StringUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.nl.controller.common.annotation.SystemServiceLog;
import com.nl.controller.common.exception.SmsException;
import com.nl.controller.common.mapper.CommonMapper;
import com.nl.controller.common.service.CommonService;
import com.nl.controller.common.util.AES;
import com.nl.controller.web.bean.BlackUser;
import com.nl.controller.web.bean.SmsTemplateAttr;
import com.nl.controller.web.global.GlobalConst;
import com.nl.controller.web.mapper.SmsTemplateAttrMapper;
import com.nl.controller.web.mapper.UtilMapper;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@Service
public class SmsTemplateAttrService {
    @Autowired
    private SmsTemplateAttrMapper smsTemplateAttrMapper;

    @Autowired
    private CommonService commonService;
    
    @Autowired
    private UtilMapper utilMapper;

    @Autowired
	private CommonMapper commonMapper;
    @SystemServiceLog(description = "查询模板信息表", value = false)
    public PageInfo<SmsTemplateAttr> findTempalteAttr(int page, int limit, String cityId, String mgrId, String mgrName, String state, String flag) {
        Map<String, Object> map = new HashMap<>();
        map.put("cityId", cityId);
        map.put("mgrId", mgrId);
        map.put("mgrName", mgrName);
        map.put("state", state);
        List<SmsTemplateAttr> list;
        if (flag == null) {
            try {
                PageHelper.startPage(page, limit);
                list = smsTemplateAttrMapper.findTemplateAttr(map);
                commonService.createSmsOperLog("4", "查询模板配置信息表", "0", "短信模板管理");
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                commonService.createSmsOperLog("4", "查询模板配置信息表", "1", "短信模板管理");
                throw new SmsException("查询模板配置信息表出现异常");
            }
        } else {
            map.put("flag", 1);
            try {
                list = smsTemplateAttrMapper.findTemplateAttr(map);
                commonService.createSmsOperLog("4", "查询模板审核信息表", "0", "短信模板管理");
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                commonService.createSmsOperLog("4", "查询模板审核信息表", "1", "短信模板管理");
                throw new SmsException("查询模板审核信息表");
            }
        }
        PageInfo<SmsTemplateAttr> pageInfo = new PageInfo<SmsTemplateAttr>(list);
        return pageInfo;
    }

    @SystemServiceLog(description = "短信项目模板配置", value = false)
    public int configureTemplate(String mgrId, String startTime, String endTime, String thresholdStartTime, String thresholdEndTime, String everyDayStartTime, String everyDayEndTime, String realTime, String isLocal, String cycle, int cycleThreshold, String isThreshold, int threshold, String flag,String state,String localDate,String isProvince) {
        int result = 0;
        SmsTemplateAttr smsTemplateAttr = new SmsTemplateAttr();
        try {
            smsTemplateAttr = smsTemplateAttrMapper.findTemplateAttrByMgrId(mgrId);
            log.info("短信项目模板配置获取项目信息：" + mgrId);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("短信项目模板配置获取项目信息异常：" + mgrId);
        }
        smsTemplateAttr.setState(state);
        smsTemplateAttr.setId(mgrId);
        smsTemplateAttr.setStartDate(startTime);
        smsTemplateAttr.setEndDate(endTime);
        smsTemplateAttr.setEveryDayStartTime(everyDayStartTime);
        smsTemplateAttr.setEveryDayEndTime(everyDayEndTime);
        smsTemplateAttr.setIsLocal(isLocal);
        smsTemplateAttr.setIsThreshold(isThreshold);
        smsTemplateAttr.setThreshold(threshold);
        smsTemplateAttr.setCycleThreshold(cycleThreshold);
        smsTemplateAttr.setThresholdStartTime(thresholdStartTime);
        smsTemplateAttr.setThresholdEndTime(thresholdEndTime);
        smsTemplateAttr.setRealTime(realTime);
        smsTemplateAttr.setLocalDate(localDate);
        smsTemplateAttr.setIsProvince(isProvince);
        log.info(smsTemplateAttr.toString());
        //是否设置阀值, 0 不设置  1设置发送总量 2 发送周期 3 全设置
            smsTemplateAttr.setCycle(cycle);
        if ("insert".equals(flag)) {
            try {
                result = smsTemplateAttrMapper.insertTemplate(smsTemplateAttr);
                commonService.createSmsOperLog("2", "添加模板属性"+mgrId, "0", "短信模板管理");
            } catch (Exception e) {
                e.printStackTrace();
                commonService.createSmsOperLog("2", "添加模板属性"+mgrId, "1", "短信模板管理");
                log.error("配置模板属性项目id： " + mgrId);
                throw new SmsException("配置模板属性项目id： " + mgrId);
            }
        } else if ("modify".equals(flag)) {
        	String seqId = commonMapper.getLogSeqId();
        	SmsTemplateAttr smsTemplateAttrHis = new SmsTemplateAttr();
            try {
               smsTemplateAttrHis = smsTemplateAttrMapper.findTemplateAttrByMgrId(mgrId);//获取项目模板修改前数据
               result = smsTemplateAttrMapper.modifyTemplate(smsTemplateAttr);
               //插入项目模板历史表
               result = smsTemplateAttrMapper.insertTemplateHis(smsTemplateAttrHis, seqId);
               commonService.createSmsUpdateOperLog("3", "修改模板属性"+mgrId, "0", "短信模板管理",seqId);
            } catch (Exception e) {
                e.printStackTrace();
                commonService.createSmsOperLog("3", "修改模板属性"+mgrId, "1", "短信模板管理");
                log.error("配置模板属性项目id： " + mgrId);
                throw new SmsException("配置模板属性项目id： " + mgrId);
            }
        }
        return result;
    }

    @SystemServiceLog(description = "短信项目模板查询", value = false)
    public SmsTemplateAttr findTemplateAttrByMgrId(String mgrId) {
        SmsTemplateAttr smsTemplateAttr;
        try {
            smsTemplateAttr = smsTemplateAttrMapper.findTemplateAttrByMgrId(mgrId);
            smsTemplateAttr.setSmsRealtimeControl(smsTemplateAttrMapper.findBySmsRealtimeControlMgrId(mgrId));
            String localDate = smsTemplateAttr.getLocalDate();
            if (null!=localDate && !"".equals(localDate)) {
            	localDate = "无";
			}else {
				localDate = localDate+"天";
			}
            smsTemplateAttr.setLocalDate(localDate);
            if(null!=smsTemplateAttr.getCityId()&&!"".equals(smsTemplateAttr.getCityId())&&!"25".equals(smsTemplateAttr.getCityId())){
            	smsTemplateAttr.setCityName(smsTemplateAttr.getCityName()+"市");
            }
            if(null==smsTemplateAttr.getCountyId()||"".equals(smsTemplateAttr.getCountyId())){
            	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2());
            }else{
            	smsTemplateAttr.setCountyName(utilMapper.getCountyName(smsTemplateAttr.getCountyId()));
            	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2()+"/"+smsTemplateAttr.getCountyName());
            }
            commonService.createSmsOperLog("4", "查询模板属性", "0", "短信模板管理");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("查询模板属性项目id： " + mgrId);
            commonService.createSmsOperLog("4", "查询模板属性", "1", "短信模板管理");
            throw new SmsException("查询模板属性项目id： " + mgrId);
        }
        return smsTemplateAttr;
    }

    /**
     * 重置模板信息
     * @param map
     * @return
     */
    public  int resetThreshold(HashMap map){
        int result=0;
        try {
            result=smsTemplateAttrMapper.resetThreshold(map);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("重置模板信息" );
        }
        return  result;
    }
    
    
    @SystemServiceLog(description = "查询项目模板信息表", value = false)
    public PageInfo<SmsTemplateAttr> findTempalteAttr(int page, int limit, String cityId, String mgrId, String mgrName, String state, String flag,String mgrState,String ckeckState,String countyId) {
        Map<String, Object> map = new HashMap<>();
        map.put("cityId", cityId);
        map.put("mgrId", mgrId);
        map.put("mgrName", mgrName);
        map.put("state", state);
        map.put("mgrState", mgrState);
        map.put("ckeckState", ckeckState);
        map.put("countyId", countyId);
        List<SmsTemplateAttr> list;
        PageHelper.startPage(page, limit);
        if (flag == null) {
            try {
                list = smsTemplateAttrMapper.findTemplateAttr(map);
                for (SmsTemplateAttr smsTemplateAttr : list) {
                    if(null==smsTemplateAttr.getCityId()||"".equals(smsTemplateAttr.getCityId())||"25".equals(smsTemplateAttr.getCityId())){
                    	smsTemplateAttr.setCityName("-");
                    }else{
                    	smsTemplateAttr.setCityName(smsTemplateAttr.getCityName()+"市");
                    }
                    if(null==smsTemplateAttr.getCountyId()||"".equals(smsTemplateAttr.getCountyId())){
                    	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2());
                    }else{
                    	smsTemplateAttr.setCountyName(utilMapper.getCountyName(smsTemplateAttr.getCountyId()));
                    	smsTemplateAttr.setBelong(smsTemplateAttr.getCityName2()+"/"+smsTemplateAttr.getCountyName());
                    }
                    smsTemplateAttr.setStationNum(utilMapper.getStationNumById(smsTemplateAttr.getId()));
                }
                commonService.createSmsOperLog("4", "查询项目模板信息表", "0", "短信模板管理");
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                commonService.createSmsOperLog("4", "查询项目模板信息表", "1", "短信模板管理");
                throw new SmsException("查询项目模板信息表出现异常");
            }
        } else {
            map.put("flag", 1);
            try {
                list = smsTemplateAttrMapper.findTemplateAttr(map);
                commonService.createSmsOperLog("4", "查询模板审核信息表", "0", "短信模板管理");
            } catch (Exception e) {
                e.printStackTrace();
                log.error("查询模板信息表");
                commonService.createSmsOperLog("4", "查询模板审核信息表", "1", "短信模板管理");
                throw new SmsException("查询模板审核信息表");
            }
        }
        PageInfo<SmsTemplateAttr> pageInfo = new PageInfo<SmsTemplateAttr>(list);
        return pageInfo;
    }
    @SystemServiceLog(description = "查询项目模板历史表", value = false)
    public SmsTemplateAttr findTemplateAttrHis(String seqId){
    	SmsTemplateAttr smsTemplateAttr = new SmsTemplateAttr();
    	try {
    		smsTemplateAttr = smsTemplateAttrMapper.findTemplateAttrHis(seqId);
    		String isLocalHis = smsTemplateAttr.getIsLocal();
            if ("0".equals(isLocalHis)) {
            	smsTemplateAttr.setIsLocal("本地");
            }else if ("1".equals(isLocalHis)) {
            	smsTemplateAttr.setIsLocal("外地");
            }else if ("2".equals(isLocalHis)) {
            	smsTemplateAttr.setIsLocal("本地+外地");
            }
            String cycleHis = smsTemplateAttr.getCycle();
            if ("1".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按年");
            }else if ("2".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按月");
            }else if ("3".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按周");
            }else if ("4".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按日");
            }else if ("5".equals(cycleHis)) {
            	smsTemplateAttr.setCycle("按时间段");
            }
            String isThresholdHis = smsTemplateAttr.getIsThreshold();
            if ("0".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("不设置");
            }else if ("1".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("设置发送总量");
            }else if ("2".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("设置发送周期");
            }else if ("3".equals(isThresholdHis)) {
            	smsTemplateAttr.setIsThreshold("全设置");
            }
            String isProvinceHis = smsTemplateAttr.getIsProvince();
            if ("0".equals(isProvinceHis)) {
            	smsTemplateAttr.setIsProvince("省内");
            }else if ("1".equals(isProvinceHis)) {
            	smsTemplateAttr.setIsProvince("全部");
            }
            String realTimeHis = smsTemplateAttr.getRealTime();
            if ("0".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("立即发送");
            }else if ("5".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("延迟5分钟发送");
            }else if ("10".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("延迟10分钟发送");
            }else if ("20".equals(realTimeHis)) {
            	smsTemplateAttr.setRealTime("延迟20分钟发送");
            }
            smsTemplateAttr.setLocalDate(smsTemplateAttr.getLocalDate()+"天");
    		commonService.createSmsOperLog("4", "历史项目模板查询", "0", "系统管理");
		} catch (Exception e) {
			e.printStackTrace();
			commonService.createSmsOperLog("4", "历史项目模板查询", "1", "系统管理");
            log.error("历史项目模板查询");
            throw new SmsException("历史项目模板查询异常："+seqId);
		}
		return smsTemplateAttr;
    }
    
    /**
     * desc:非系统管理员修改项目入待发表
     * @author syl
     * @Date 2019年10月29日 下午7:36:24
     * @param map
     */
    public int insertSend(Map<String, Object> map){
    	int result=0;
    	try {
    		result = smsTemplateAttrMapper.insertSend(map);
		} catch (Exception e) {
			e.printStackTrace();
		}
    	return result;
    }

}